package com.vshop.mapper;

import com.vshop.entity.alast.common.ServicePlanOrderRecord;
import com.vshop.entity.comentity.OrderExceptionRecord;
import com.vshop.entity.comentity.UserOrderPackage;
import com.vshop.entity.optimize.PartnerPackageGive;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 2020年1月8日新增的mapper专门处理新加的数据库操作的方法
 *
 * @author lm
 * @date 2020/1/8
 */

@Mapper
public interface PurchaseLogicMapper {
    /***
     *不管是续订还是新订，都需要在拿到orderId之后去更新订单记录
     * @param order
     * @return
     */
    Integer updateOrderRecord(UserOrderPackage order);

    /***
     * 异常信息入库 :user_order_exception_record_t
     * @param record
     */
    void storageExceptionRecord(OrderExceptionRecord record);

    /***
     * 新订|续订的结果回调之后去更新数据库记录:user_order_package_t
     * @param order
     * @return
     */
    Integer updateOrderCallback(UserOrderPackage order);

    /**
     * 新版本：对应表格：service_plan_order_record_t
     * <p>
     * 新订|续订的结果回调之后去更新数据库记录
     *
     * @param orderRecord
     * @return
     */
    Integer updateOrderCallbackByOrderNo(ServicePlanOrderRecord orderRecord);

    /**
     * 最新版本：对应表格：service_plan_order_record_t
     * <p>
     * 新订|续订的回调之后去更新数据库记录
     *
     * @param orderRecord
     * @return
     */
    Integer updateCallbackOrder(ServicePlanOrderRecord orderRecord);

    /**
     * 查询赠送套餐列表
     *
     * @return
     */
    List<PartnerPackageGive> queryGiveCode();

    /***
     *去数据库更新isRenew和isOpen参数
     * @param order
     * @return
     */
    Integer updateOrder(UserOrderPackage order);

    /**
     * 对应表格：service_plan_order_record_t
     * <p>
     * 去数据库更新isRenew和isOpen和isRequest参数
     *
     * @param orderRecord
     * @return
     */
    Integer updateOrderByOrderNo(ServicePlanOrderRecord orderRecord);

    /**
     * 查询卡片是否已经订阅
     *
     * @param deviceCode
     * @return
     */
    String queryEmail(@Param("deviceCode") String deviceCode);

    /**
     * 查询套餐编码是否存在于赠送套餐列表
     *
     * @param packageCode
     * @return
     */
    Integer queryGiveDateOrNot(@Param("packageCode") String packageCode);

    /**
     * 根据orderNo和deviceCode查询到订单记录
     *
     * @param orderNo
     * @param deviceCode
     * @return
     */
    ServicePlanOrderRecord queryRecord(@Param("orderNo") String orderNo,
                                       @Param("deviceCode") String deviceCode);

    /**
     * 未避免同一个订单在遇到异常情况时发生多次没有必要的请求，只要请求到达这边，
     * 先去把数据库里面的：service_plan_order_record_t的isRequest值从0变成1，就算有异常也只去记录一次即可
     *
     * @param deviceCode
     * @param orderNo
     * @return
     */
    Integer updateIsRequestByOrder(@Param("deviceCode") String deviceCode,
                                   @Param("orderNo") String orderNo);
}
